1994-43-Club80 S.5-14
VGA-Karte anstelle der Hercules-Karte am Club-80-TerminalHelmut BernhardtSo sehr viel was anderes als die Hercules-Karte ist die VGA-Karte auch nicht. Bei beiden Karten ist der Bildwiederholspeicher sowohl im Text- als auch im Grafik-Modus memory mapped und die CPU hat sich selbst darum zu kümmern, an welche Adressen die Zeichen bzw. die Grafik-Bytes zu verholen sind. Beide Karten sind völlig passiv und weisen keinerlei Videoprozessor- Funktionen auf. VGA-Karten gibt es in einer Vielzahl von Erscheinungsformen, sie können einen 8- oder 16-Bit-Bus haben, sie können im Fall eines 16-Bit-Bus in 8-Bit-Slots des PC funktionieren oder dies auch unterlassen, sie können ihr BIOS in 8- oder 16-Bit-Breite zugänglich machen, sie können 256K oder auch bis 2MB Video-RAM enthalten, sie können maximal 256, 32K, 64K oder 16 mega Farben gleichzeitig auf dem Monitor darstellen, sie können eine einfache VGA-Karte oder eine dazu abwärtskompatible Video-Karte mit zusätzlichem Grafik-Prozessor (Windows-Accellerator) sein, sie können die Super-VGAModi VESA-kompatibel oder auch mit Wildwuchs-Einbindungen oder auch garnicht unterstützen, und es ist nicht abzusehen, welche Überraschungen noch zu erwarten sind bzw. bereits existieren. Für den PC-Benutzer ist diese Vielfalt - abgesehen von Performance- Unterschieden - relativ schnuppe, dort funktioniert die Karte fast immer und mit entsprechenden Treibern auch unter Windows mit ihren eventuell zusätzlichen Eigenschaften. Wem eine VGA-Karte im Club-80-Terminal laufen soll, dürfen einige Umstände nicht gegeben sein. Von den Abmessungen her darf es nicht eine der riesigen Lappen sein, die an ECB-Bus nicht mehr als Huckepack-Karte auf das Terminal paßt. Es darf auch keine 16-Bit-Karte, die im 8-Bit-Slot nicht läuft, sein, und sie muß registerkompatibel zur ursprünglichen VGA von IBM sein (was meistens der Fall ist). Hier sollen die Grundlagen der Einbindung der VGA-Karte in das Betriebsprogramm des Club-80-Terminals herausgestellt werden. Leider geht es nicht ganz ohne Hardware-Eingriffe, deshalb soll erst dieser Aspekt behandelt werden. Hardware-AnpassungDie Hercules-Karte belegt im PC zwei 32K-Video-Seiten an den Adressen B0000..B7FFF und B8000..BFFFF. Zur Erzeugung des Freigabesignals für den Speicherzugriff genügte es, eine low aktive Adreßleitung A18 auf die Hercules-Karte einwirken zu lassen, wenn die CPU ein low aktives /MERQ und einen High Pegel auf A15 ausgab. Die an die Hercules-Karte gelangenden Adressen A16, A17 und A19 waren dauerhaft high und der Pegel von A15 (zur Hercules) wurde durch ein Bit eines Latch gesteuert. Die VGA-Karte benutzt diese Speicherbereiche auch als Video-RAM in den Text-Modi. Im Grafik-Modus wird aber der Bereich A0000. .AFFFF benutzt und das BIOS in einem ROM auf der VGA-Karte belegt den Bereich C0000. .C7FFF. Natürlich läuft die darin enthaltene Software nicht auf dem Z80 des Terminals - es gibt aber eine Menge wichtiger Tabellen in diesem ROM und eine Reihe von Zeichensätzen (die für die Benutzung in den Textmodi erst in die Speicherebene 2 geladen werden müssen). Die Pegel der Adressen A15..A19, die für die Freigabe der einzelnen Bereiche maßgeblich sind, seien hier zusammengestellt -daraus ergibt sich dann auch die einfache Schaltung, die diese Bereiche ansteuern kann. Adreß- A19 A18 A17 A16 A15 Speicherart bereich (zur VGA-Karte) -------------------------------------------------------------- A0000..A7FFF 1 0 1 0 0 Grafik, erste Hälfte A8000..AFFFF 1 0 1 0 1 Grafik, zweite Hälfte B0000..B7FFF 1 0 1 1 0 Text, monochrom B8000..BFFFF 1 0 1 1 1 Text, color C0000..C7FFF 1 1 0 0 0 BIOS-ROM -------------------------------------------------------------- Es ist zu erkennen, daß A19 für alle Bereiche high ist. Diese Leitung kann an +5V angeschlossen bleiben. A18 und A17 haben entweder das Muster 01 oder 10, wenn hier 00 oder 11 anliegt, wird die VGA nicht angesprochen. Damit läßt sich eine Freigabe der Karte herleiten, in die die bisherige Freigabe (/HERC = /MERQ * A15) einbezogen wird. Dafür ist ein zusätzliches IC 74HCT157 nötig, das in das Rasterfeld am oberen Ende der Terminal-Karte eingelötet und folgendermaßen beschaltet wird: /HERC ist das bisherige Freigabe-Signal für die Hercules-Karte, dessen Verbindung zu HA18 (A18 des PC-Slot) getrennt wird und Q5, Q4 und Q1 sind Ausgänge des 74HCT-259-Latch (wobei Q1 bereits an HA15 und +5V an HA19 des PC-Slot liegen. Wenn /HERC nicht low aktiv ist, sind alle Ausgänge des 74HCT157-Multiplexers high (oder low - so genau weiß ich das nicht aus dem Kopf), auf alle Fälle liegt dann nicht eines der Freigabemuster 01 oder 10 an HA18/HA17. Nun aber zur Programmierung:Im Laufe der Jahre hat sich die Video-Ausgabe beim PC von ursprünglich einer maximalen Auflösung von 640*200 Punkten im Monochrom-Modus auf heute 1024*768 Punkten mit gleichzeitig 256 aus 256k Farben oder auch 640*480 Punkten mit gleichzeitig 16 mega Farben entwickelt. Für eine Reihe von Auflösungen haben sich dafür Standards entwickelt, andere werden nie benutzt bzw. von jedem Hersteller mit anderen Modus-Nummern bedacht. Hier werden deshalb nur die von IBM abgesegneten Modi 00h bis 13h behandelt; die folgenden Überlegungen gelten dann auch für alle mit IBM registerkompatibel VGA-Karten. Standard Video Modi der VGAModus Auflösung Zeichen- Adresse Berechnung der Farben Box Seiten Länge Offsetadresse 0h Text 40x25 16 8x8 8 B800 800 2*(40*y+x) 1h Text 40x25 16 8x8 8 B800 800 2*(40*y+x) 2h Text 80x25 16 8x16 8 B800 1000 2*(80*y+x) 3h Text 80x25 16 8x16 8 B800 1000 2*(80*y+x) 4h Grafik 320x200 4 8x8 1 B800 4000 8152*(y and 2)+y*40 + x div 4 5h Grafik 320x200 4 8x8 1 B800 4000 8152*(y and 2)+y*40 + x div 4 6h Grafik 640x200 2 8x8 1 B800 4000 8152*(y and 2)+y*40 + x div 4 7h Text 80x25 mono 9x14 8 B000 1000 2*(80*y+x) 8h reserviert 9h reserviert Ah reserviert Bh reserviert Ch reserviert Dh Grafik 320x200 16 8x8 8 A000 2000 y*40 + x div 8 Eh Grafik 640x200 16 8x8 4 A000 4000 y*80 + x div 8 Fh Grafik 640x350 mono 8x14 2 A000 8000 y*80 + x div 8 10h Grafik 640x350 16 8x14 2 A000 8000 y*80 + x div 8 11h Grafik 640x480 mono 8*16 1 A000 A000 y*80 + x div 8 12h Grafik 640x480 16 8*16 1 A000 A000 y*80 + x div 8 13h Grafik 320x200 256 8*8 1 A000 FFFF 320*y +xin den Modi 0h bis 3h (und 7h bei der VGA) hat die EGA-Karte 14 und die VGA-Karte 16 Rasterzeilen pro Zeichen. Erweiterte Super-VGA-Modi für Tseng ET4000 Chip (und HiColor-DAC) Diese Auflösungen können bei anderen Super-VGA-Karten mit anderen Modus-Nummern zu bedienen sein; erst der VESA-Standard hat hier nachträglich Einheitlichkeit gebracht, ältere Karten wußten davon noch nichts. Es ist auch nicht bekannt, wo für diese Modi in der Parameter-Table die Daten stehen. 29h Grafik 800x600 16 8*16 1 A000 FFFF 2Eh Grafik 640x480 256 8*16 1 A000 FFFF Grafik 640x480 32k 8*16 1 A000 FFFF mit Sierra-DAC 30h Grafik 800x600 256 8*16 1 A000 FFFF Grafik 800x600 32k 8*16 1 A000 FFFF mit Sierra-DAC 37h Grafik1024x768 16 8*16 1 A000 FFFF 38h Grafik1024x768 256 8*16 1 A000 FFFF Grafik1024x768 32k 8*16 1 A000 FFFF mit Sierra-DAC Grundsätzlich gibt es zwei Strategien, wie dem Z80 des Terminals all die Informationen zur Initialisierung eines Video-Modus zur Verfügung gestellt werden:
Mit welchen Werten der Registerdschungel einer VGA-Karte in den verschiedenen Modi zu initialisieren ist, weiß das BIOS der VGA-Karte aus einem Feld von Tabellen im BIOS-ROM. Beim Hochfahren des PC wird eine Initialisierungs-Routine im VGA-BIOS aufgerufen, die außer der Initialisierung des Modus 03h u.a. auch einen Save-Table-Pointer an der Adresse 0000h:04A8h ablegt, der (wie nicht schwer zu erraten) auf eine Save-Table zeigt. Diese Save-Table ist ein Feld von weiteren Pointern deren erster auf den Anfang der Tabellen mit den Registerinhalten für die verschiedenen Video-Modi zeigt. Behufs dieser Information könnt man an die Initialisierungs-Werte für die Register der VGA heran. Der Offset der Werte für einen der Video-Modi 00h bis 13h (bzw. 11h bei der EGA-Karte) geht aus diesen beiden Arrays hervor. const VGAOfs: array[0. .$13] of Word = ($5C0,$5C0,$600,$600, $100,$140,$180,$640, $200,$240,$280,$2C0, $300,$340,$380,$440, $480, $680, $6C0, $700) ; const EGAOfs: array[0..16] of Word = ($4C0,$500,$540,$580, $100,$140,$180,$1CO, $200,$240,$280,$2C0, $300,$340,$380,$440, $480); Aufbau der Parameter-Tabelle eines Video Modus, je Modus 64 Bytes IndexAdr DataAdr Index ---------------------------------------------------------------------------- 0 Byte Anzahl Bildschirm-Textspalten BIOS-Variablen 1 Byte Anzahl Bildschirm-Textzeilen 2 Byte Zeichenhöhe in Rasterzeilen 3 Word Speichergröße pro Bildseite Sequenzer Register 3C4h 3C5h 5 Byte Clocking Mode Reg. 1 6 Byte Map Mask Reg. 2 7 Byte Character Generator Select Reg. 3 8 Byte Memory Mode Reg. 4 Allgemeine Register 9 Byte Miscellaneous Output Reg. 3C2h (W), 30Ch (R) CRTC Register 3B4h/3D4h 3B5h/3D5h 10 Byte Horizontal Total Reg. 0 11 Byte Horizontal Display End Reg. 1 12 Byte Start Horizontal Blanking Reg. 2 13 Byte End Horizontal Blanking Reg. 3 14 Byte Start Horizontal Retrace Reg. 4 15 Byte End Horizontal Retrace Reg. 5 16 Byte Vertical Total Reg. 6 17 Byte Overflow Reg. 7 18 Byte Preset Row Scan Reg. 8 19 Byte Maximun Scan Line Reg. 9 20 Byte Cursor Start Reg. 10 21 Byte Cursor End Reg. 11 22 Byte Start Address High Reg. 12 23 Byte Start Address Low Reg. 13 24 Byte Cursor Location High Reg. 14 25 Byte Cursor location Low Reg. 15 26 Byte Vertical Retrace Start Reg. 16 27 Byte Vertical Retrace End Reg. 17 28 Byte Vertical Display End Reg. 18 29 Byte Offset Reg. 19 30 Byte Underline Location Reg. 20 31 Byte Start Vertical Blanking Reg. 21 32 Byte End Vertical Blanking Reg. 22 33 Byte Mode Control Reg. 23 34 Byte Line Compare Reg. 24 Attribute Controller Register 3C0h 3C0h(W),3C1h(R) 35 Byte Palette Reg. 0 0 36 Byte Palette Reg. 1 1 37 Byte Palette Reg. 2 2 38 Byte Palette Reg. 3 3 39 Byte Palette Reg. 4 4 40 Byte Palette Reg. 5 5 41 Byte Palette Reg. 6 6 42 Byte Palette Reg. 7 7 43 Byte Palette Reg. 8 8 44 Byte Palette Reg. 9 9 45 Byte Palette Reg. 10 10 46 Byte Palette Reg. 11 11 47 Byte Palette Reg. 12 12 48 Byte Palette Reg. 13 13 49 Byte Palette Reg. 15 14 50 Byte Palette Reg. 16 15 51 Byte Mode Control Reg. 16 52 Byte Overscan Reg. 17 53 Byte Color Plane Enable Reg. 18 54 Byte Horizontal Pel Panning Reg. 19 Graphics Controller Register 3CEh 3CFh 55 Byte Set/Reset Reg. 0 56 Byte Enable Set/Reset Reg. 1 57 Byte Color Compare Reg. 2 58 Byte Data Rotate Reg. 3 59 Byte Read Map Select Reg. 4 60 Byte Mode Reg. 5 61 Byte Miscellaneous Reg. 6 62 Byte Color Don't Care Reg. 7 63 Byte Bit Mask Reg. 8 ---------------------------------------------------------------------------- Mit SAVEROMP wird ein Z80-Source-Listing RCMTABLE.ASM erzeugt, das per DEFB die Tabellen der Initialisierungdaten für die relevanten Video-Modi enthält. Eine andere Strategie besteht darin, die verschiedenen Video-Modi der VGA durch das BIOS einstellen zu lassen und im jeweiligen Modus die Inhalte der Register auszulesen und diese in der Struktur der ROM-Tabelle in eine Datei zu schreiben. Das Programm SAVEREGS erzeugt auf diese Art as Sourcelisting RECTABLE.ASM. Soft-Zeichensätze ladenIn den Text-Modi gilt es außerdem noch, daß im Zeichengenerator-RAM (Speicherebene 2) ein passender Zeichensatz geladen ist. Zeichensätze in den Auflösungen 8*8, 8*14, 8*16, 9*14 und 9*16 liegen im VGA-RCM gebrauchsbereit vor. Bei der Darstellung von 9*14 und 9*16 Rasterpunkten pro Zeichen wird durch die Hardware nach je 8 Rasterpunkten entsprechend der Information aus dem Zeichensatz ein neunter Punkt in der Farbe des Hintergrunds erzeugt. Den Anfang eines Zeichensatzes im ROM kann man sich über eine Funktion des VGA-BIOS-Interrupt 10h ebenfalls vom BIOS holen. Damit sind auch die Zeichensätze für andere Benutzer als einen 80X86 zugänglich. Man kann entweder mit GETVPARM sich ein Listing ZEIGER.ASM erzeugen, das alle Pointer auf Tabellen und Zeichensätze im VGA-BIOS (übersetzt in die Sicht das Z80 im Terminal) enthält, oder sich mit dem Programm SAVEFONT ein Listing VGAFONTS.ASM erzeugen, das die Zeichensätze selbst enthält. Laden der Color-Lookup-TableDamit ist auf dem Bildschirm aber noch nicht viel zu sehen, denn die Werte in den 16 Palettenregistern ergeben noch nicht direkt die auf dem Monitor dargestellte Farbe, diese 8 Bit Werte stellen Zeiger in die Color Lookup Table (CLUT) dar. die CLUT ist ein Register-Array vcn 256 3-Byte-Registern worin jeweils nur die Bits 0..5 von Bedeutung sind, es sind dies die Werte der Farbintensitäten (0..63) für die Farbkomponenten R, G und B. Der lange Weg zun Zustandekommen einer Farbe auf dem Monitor ist dieser: Im Attribut-Byte eines Zeichens im Video-RAM kodieren die Bits 0..3 die Farb-Nr. des Textzeichens und die Bits 4..7 die Farb-Nr. des Hintergrunds. Für beide Komponenten wird aus dem Palettenregister mit der Farb-Nr. der Inhalt des Registers als Zeiger in die CLUT verwendet. Die dort vorliegenden Werte für R, G und B werden schließlich über den Video-DAC analog gewandelt und zum Monitor geschickt. Die Standard-Inhalte der CLUT kann man sich auch wieder durch ein kleines Programm (SAVECLUT) vom BIOS einstellen lassen, auslesen und als Assembler-Source-Listing (FARBEN.ASM) auf die Diskette schreiben lassen. Für dieses Problem habe ich noch keine Alternativ-Lösung gefunden, um die an versteckter Stelle im VGA-BIOS irgendwo vorliegenden Werte aus dem BIOS-ROM heraus direkt zu benutzen. Wenn das BIOS-ROM der VGA seihst im Terminal benutzt werden soll, muß FARBEN.ASM in das Be-triebsprogramm des Terminals gelinkt werden. Damit hätte man dann sehen mal die Informationen, mit welchen Inhalten die Register der VGA im jeweiligen Video-Modus zu versorgen sind. Dabei ist zu bedenken, daß die Register 0..6 des CRTC erst beschrieben werden können, wenn im Register 11h D7=0 gesetzt wird. Der CRTC liegt in den Monochromodi auf der Portadresse 3B4h/3B5h und in den Farbmodi bei 3D4h/3D5h. Monochrom und Farbe wird durch D0 des Miscellaneous Output Registers vorgegeben. Man kann sich dieses Bit in der Tabelle (Byte 9) ansehen. Während der Programmierung der Register, die für das Video-Timing zuständig sind, sollte im Reset Register des Sequenzers (Index 0) immer 03h stehen. Anschließend muß dort 00h eingetragen werden, um den Resetzustand der VGA zu beenden. Um zu zeigen, was bei der Initialisierung der Register nacheinander zu erfolgen hat, sei das Programm FINITEST und darin insbesondere die Procedure write_regs(mode:byte) ein Anhaltspunkt. Sie ist in Z80-As-sembler umzusetzen und in das Terminal-Betriebsprogramm anstelle der derzeitigen Initialisierung der Hercules-Karte einzumassieren. Als grundsätzlicher Initialisierungs-Video-Modus sollte Modus 03h verwendet werden. Die 3-Digit-Portadressen des PC reduzieren sich beim Club-80-Terminal auf die niederwertigsten beiden Digits (A8 und A9 werden bei Portzugriffen auf die Video-Karte immer high-gesteuert, so daß automatisch das höchstwertige Digit '3' ausgegeben wird). Das hier auch erfolgende Update der BIOS-Variablen NrOfColumns bis Page-Size braucht nicht in Z80-Assembler übertragen zu werden. Es gibt zusätzlich zu den oben behandelten Registern noch einige weitere Register, die hier kurz einzeln vorgestellt werden sollen: Feature Control Register: Port 3BAh/3DAh (wr), 3CAh (rd, nur VGA) Dieses Register wird im PC sowohl bei EGA- als auch bei VGA-Karten in allen Videomodi mit 00h geladen. Input Status #0 Register: Port 3C2h (nur Lesen) D0..D3: unbenutzt D4: 0= Dip-Schalter geschlossen 1= Dip-Schalter offen Lesen eines von 4 Dip-Schaltern, D3 und D2 im Miscellaneous Output Reg. geben den Schalter vor D5:* logischer Pegel von Pin 19 des Feature Connectors D6:* Logischer Pegel von Pin 17 des Feature Connectors D7: 0= Kein Vertical Retrace Interrupt IRQ2 auf getreten 1= Vertical Retrace Interrupt IRQ2 aufgetreten * nur bei EGA Input Status #1 Register: Port 3BAh/3DAh (nur Lesen) D0: 1= Hor/Vert Retrace aktiv D1: 1= Lichtgriffelimpuls aufgetreten D2: 0= Lichtgriffelschalter gedrückt D3: 1= Vertical Retrace (nicht Horizontal) D4,D5: gibt log. Pegel zweier Video-Signale wieder welche beiden Signale, gibt das Color Plane Enable Reg. des Attribute Controller vor Reset Register des Sequenzers: Port 3C4h Index(:=0), Part 3C5h Data D0,D1: 0,0: VGA-Hardware ist aktiv 1,1: Reset-Zustand, keine Signale zum Monitor Color Select Register des Attribute Controllers; Port 3C0h Index (:=20), 3C1h Data D0..D3: Farbregister Adreßbit 4..7 ist in allen Videomodi mit 00h zu befüllen CGA- und Hercules-compatible Register Diese Register lassen sich nur erreichen, wenn die Karte ein Umschalten auf Register-Kompatibilität zu diesen Karten erlaubt. Das Umschalten erfolgt durch Ausgabe von D0=0 (für CGA) und D0,D1=0 (für Hercules ) an das Mode Control Register des CRTC und Bedröhnen der für die jeweilige Karte im folgenden aufgeführten Register mit den für diese Karte gängigen Werten. 6845-Register: Port 3B4h/3D4h (Index), 3B5h/3D5h (Daten) Mode Control Register: Port 3B8h/3D8h Status Register: Port 3BAh/3DAh Configuration Register Port 3BFh (nur Hercules) Color Select Register: Port 3D9h (nur CGA) Diese Register haben die gleichen Funktionen wie bei der Hercules-Karte bzw. der CGA-Karte. Da sie für die Hercules- Karte im Beitrag zum Club-80-Terminal bereits beschrieben wurden, wird hier kein weiterer Platz verschwendet. Spezielle Register, die für die tägliche Arbeit wichtig sind die Standardwerte für diese Register stehen in der Parameter-Table und werden durch InitVGA eingetragen Map Mask Register des Sequenzers: Port 3C4h Index(: =2), 3C5h Data D0..03: 1= Schreiben in die RAM-Ebene 0..3 freigegeben Character Map Select Register des Sequenzers: Port 3C4h Index(:=3), 3C5h Data D5(nur VGA), D1, D0: Nr des Blocks des primären Zeichensatz D6(nur VGA), D3, D2: Nr des Blocks des sekundären Zeichens. Die Zeichensätze werden in den Textmodi in der Steicherebene 2 in aufeinanderfolgenden 8K.Bereichen gespeichert. Ob das darzu- stellende Zeichen aus dem primären oder sekundären Zeichensatz zu nehmen ist, entscheidet das Attributbit 3. Damit lassen sich 512 verschieden Zeichen gleichzeitig darstellen. Die Anzahl der Farben, in denen ein Zeichen dargestellt werden kann, reduziert sich in diesem Modus auf 8. Mode Control Register des CRTC: Port 3B4h/3D4h Index(:=23), 3B5h/3D5h Data DO: 0= CPU-A13 := Rasterzeilenadreßbit 0 1= CPU-A13 wirkt direkt auf das Video-RAM D1: 0= CPU-A14 := Rasterzeilenadreßbit 1 1= CPU-A14 wirkt direkt auf das Video-RAM wenn D0=0, verhält sich die VGA wie eine CGA wenn D0 und D1 = 0, verhält sich die VGA wie eine Hercules D2..D6: sollte man in Ruhe lassen D7: 0= CRTC-Reset, alle Register werden mit 0 geladen Das Miscellaneous Register des Grahics Controllers: Port 3CEh Index(:=6), 3CFh Data D0: 0= Textmodus, 1= Grafikmodus D1: 0= Adreßbit 0 unverändert siehe [1] Seite 392 1= Adreßbit 0 substituiert D3,D2: 00= A0000..BFFFF Video-RAM Adresse 01= A0000..AFFFF 10= B0000..B7FFF 11= B8000..BFFFF (dadurch erübrigt sich leider nicht der Hardpatch) Das Index Register des Attribute Controllers: Port 3C0h (wr), 3C1h (rd) Wie bei CRTC u.s.w. wird hier in Bit 0..4 vorgegeben, auf welches Datenregister (3C0h wr, 3C1h rd) zugegriffen werden soll. Zusätzlich steuert D5, ob die CPU (D5=0) oder die Vi deo-Hardware (D5=1) auf die Register zugreifen kann. D5 ist nach Verändern der Register immer auf 1 zu setzen. Durch Lesen des Input Status #1 Registers wird auf das In- dexregister für Schreibzugriffe geschaltet, beim nächsten Schreibzugriff wird dann das Datenregister angesprochen. Die Register des Video-DAC: Zugriffe auf den Video-DAC sollten nur während des Vertical Retrace stattfinden (D0,D3 des Input Status #1 Reg. high). PEL Adress Read Mode Register: Port 3C7h (wr) 3C8h (rd, Wert+1) PEL Adress Write Mode Register: Port 3C8h (rd/wr) diese beiden Register sind Index Register mit unterschied- lichen Adressen für Lesen oder Schreiben des eigentlichen PEL Data Registers. Beim Lesen des PEL Address Read Mode Registers erhält man einen um 1 erhöhten Wert gegenüber dem vorher eingeschriebenen Wert. PEL Data Register: Port 3C9h (rd/wr) Durch dreimaliges Lesen/Schreiben dieses Registers erhält/ schreibt man nacheinander die 6Bit-Farbwerte für Rot, Grün und Blau. Danach wird automatisch die Adresse im Index Re- gister erhöht, sodaß sofort die nächsten 3 Farbwerte gele- sen/geschrieben werden können. DAC State Register: Port 3C7h (rd) D1,D0: 00= Lesemodus aktiv, 11= Schreibmodus aktiv PEL Mask Register: Port 3C6h (rd/wr) 8Bit AND-Maske für Farbregister-Adresse; damit lassen sich einzelne Bits, die von den Palettenregistern kommen, desak- tivieren.Das Laden der Zeichensätze Die Adresse der Zeichensätze im BIOS-ROM läßt sich das Programm GETVPARM durch das BIOS selbst geben und trägt sie (ungerechnet auf die Adressen im Terminal) in VGA.ASM ein. In den Textmodi beinhaltet Video-Speicher eine lineare Folge von Bytepaaren (Zeichen und Attribut), wobei eine lineare Zuordnung der Bildschirmposition zur Adresse im Video-RAM besteht. Aus den ersten beiden Einträgen in der Parameter-Tabelle eines Modus können Zeilenlänge und Anzahl Bildschirmzeilen entnommen werden. Die Größe des für eine Seite benötigten Video-RAMs ergibt sich aus 2 * Zeichen pro Zeile * Zeilen pro SeiteLiteratur: [1] Matthias Uphoff: Die Programmierung der ESA/VGA Grafikkarte; Addison-Wesley; ISBN 3-89319-274-3 [2] Michael Tischer: PC Intern 3.0; Data Becker Verlag 1992; ISBN 3-89011-591-8 [3] Arno Fritz: Regenbogen im Eigenbau - Programmierung der 256--Color-Modi des ET3000; mc 8/91, S.120 [4] Michael Schulte: Heißer Farb-Ofen - Wie man aus dem ET4000--Chipsatz das Beste herausholt; mc 12/91, S.140 [5] Dirk Meiners: Farbe bekennen - Auswahl der Farbapaletten bei VGA-Karten; c't 4/91, S.330 [6] Peer Meier: Schöne bunte Welt, Hardwarenahe Programmierung von VGA-Karten; c't 4/91, S.338 und c't 5/91, S.292 [7] Detlef Grell: Kleine Extras - Video-Modi und Optionen bei Super-VGAs einstellen; c't 1/92, S.156 Das Thema mit seinem ursprünglich gedachten Zweck wird nur wenige Leute interessieren; die Pascal-Sources beinhalten aber alles, was zur direkten VGA-Programmierung nötig ist, und sind deshalb eventuell auch für PC-Programmierer interessant. Damit in diesem Info noch Platz für weitere Beiträge bleibt, habe ich darauf verzichtet, die. 110 KB Source-Listings der PC-Programme und die damit erzeugten Assembler-Sources für den Terminal-Z80 hier abzudrucken. Wer daran Interesse hat, schickt mir eine leere Diskette und 2,—DM in Briefmarken und erhält dann im PC-Format die Programme. |